# 使用官方 Node.js 20 镜像作为基础镜像
FROM node:20-alpine

# 设置工作目录
WORKDIR /app

# 设置环境变量
ENV NODE_ENV=production

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 设置npm镜像源并安装依赖
RUN npm config set registry https://registry.npmmirror.com && \
    (npm ci --omit=dev || npm ci --omit=dev || npm ci --omit=dev) && npm cache clean --force

# 复制源代码
COPY src/ ./src/

# 创建非root用户
RUN addgroup -g 1001 -S nodejs && \
    adduser -S nodejs -u 1001

# 创建必要的目录并设置权限
RUN mkdir -p /app/logs /app/uploads && \
    chown -R nodejs:nodejs /app

# 切换到非root用户
USER nodejs

# 暴露端口
EXPOSE 3000

# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD node -e "const http = require('http'); \
    const options = {hostname: 'localhost', port: 3000, path: '/api/v1/health', method: 'GET'}; \
    const req = http.request(options, (res) => {process.exit(res.statusCode === 200 ? 0 : 1)}); \
    req.on('error', () => process.exit(1)); \
    req.end();"

# 启动应用
CMD ["node", "src/server.js"]